package com.hy.convenient.tool.xlsx;


import com.hy.convenient.tool.xlsx.interfaces.CheckTypeContext;
import com.hy.convenient.tool.xlsx.interfaces.CheckTypeEnum;
import com.hy.convenient.tool.xlsx.interfaces.CheckTypeMethod;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 文件描述
 *
 * @author hdy
 * @date 2019年09月06日 14:14
 */
public class CheckTypeUtil {
    /**
     * 执行数据校验
     *
     * @param typeEnum 检查类型
     * @param value 检查值
     * @param dataFormatter  当检查类型不是Data 类型时 需要传入null
     * @return 校验成功放回null，数据有错误放回 String值
     */
    public static String executeCheck(CheckTypeEnum typeEnum, Object value, Object dataFormatter) {
        if(typeEnum == CheckTypeEnum.Empty){
            return  null;
        }
        Object obj = CheckTypeContext.getCheckTypeMap(typeEnum);
        if (obj == null) {
            return  null;
        }
        Class<?> clazz = obj.getClass();
        Method[] methods = clazz.getMethods();
        try {
            for (Method m : methods) {
                if (m.getAnnotation(CheckTypeMethod.class) == null) {
                    continue;
                }
               return  (String)m.invoke(obj, value, dataFormatter);
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            return  null;
        } catch (InvocationTargetException e) {
            e.printStackTrace();
            return  null;
        }
        return null;
    }
}
